1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */ 
28 
29 module derelict.glib.gscanner;
30 
31 import derelict.glib.gtypes;
32 import derelict.glib.glibconfig;
33 import derelict.glib.ghash;
34 import derelict.glib.gdataset;
35 import core.stdc.config;
36 
37 extern (C):
38 
39 alias _GScanner GScanner;
40 alias _GScannerConfig GScannerConfig;
41 alias _GTokenValue GTokenValue;
42 alias void function (_GScanner*, char*, int) GScannerMsgFunc;
43 alias _Anonymous_0 GErrorType;
44 alias _Anonymous_1 GTokenType;
45 
46 enum _Anonymous_0
47 {
48 	G_ERR_UNKNOWN = 0,
49 	G_ERR_UNEXP_EOF = 1,
50 	G_ERR_UNEXP_EOF_IN_STRING = 2,
51 	G_ERR_UNEXP_EOF_IN_COMMENT = 3,
52 	G_ERR_NON_DIGIT_IN_CONST = 4,
53 	G_ERR_DIGIT_RADIX = 5,
54 	G_ERR_FLOAT_RADIX = 6,
55 	G_ERR_FLOAT_MALFORMED = 7
56 }
57 
58 enum _Anonymous_1
59 {
60 	G_TOKEN_EOF = 0,
61 	G_TOKEN_LEFT_PAREN = 40,
62 	G_TOKEN_RIGHT_PAREN = 41,
63 	G_TOKEN_LEFT_CURLY = 123,
64 	G_TOKEN_RIGHT_CURLY = 125,
65 	G_TOKEN_LEFT_BRACE = 91,
66 	G_TOKEN_RIGHT_BRACE = 93,
67 	G_TOKEN_EQUAL_SIGN = 61,
68 	G_TOKEN_COMMA = 44,
69 	G_TOKEN_NONE = 256,
70 	G_TOKEN_ERROR = 257,
71 	G_TOKEN_CHAR = 258,
72 	G_TOKEN_BINARY = 259,
73 	G_TOKEN_OCTAL = 260,
74 	G_TOKEN_INT = 261,
75 	G_TOKEN_HEX = 262,
76 	G_TOKEN_FLOAT = 263,
77 	G_TOKEN_STRING = 264,
78 	G_TOKEN_SYMBOL = 265,
79 	G_TOKEN_IDENTIFIER = 266,
80 	G_TOKEN_IDENTIFIER_NULL = 267,
81 	G_TOKEN_COMMENT_SINGLE = 268,
82 	G_TOKEN_COMMENT_MULTI = 269,
83 	G_TOKEN_LAST = 270
84 }
85 
86 struct _GScannerConfig
87 {
88 	gchar* cset_skip_characters;
89 	gchar* cset_identifier_first;
90 	gchar* cset_identifier_nth;
91 	gchar* cpair_comment_single;
92 	guint case_sensitive;
93 	guint skip_comment_multi;
94 	guint skip_comment_single;
95 	guint scan_comment_multi;
96 	guint scan_identifier;
97 	guint scan_identifier_1char;
98 	guint scan_identifier_NULL;
99 	guint scan_symbols;
100 	guint scan_binary;
101 	guint scan_octal;
102 	guint scan_float;
103 	guint scan_hex;
104 	guint scan_hex_dollar;
105 	guint scan_string_sq;
106 	guint scan_string_dq;
107 	guint numbers_2_int;
108 	guint int_2_float;
109 	guint identifier_2_string;
110 	guint char_2_token;
111 	guint symbol_2_token;
112 	guint scope_0_fallback;
113 	guint store_int64;
114 	guint padding_dummy;
115 }
116 
117 struct _GScanner
118 {
119 	gpointer user_data;
120 	guint max_parse_errors;
121 	guint parse_errors;
122 	const(gchar)* input_name;
123 	GData* qdata;
124 	GScannerConfig* config;
125 	GTokenType token;
126 	GTokenValue value;
127 	guint line;
128 	guint position;
129 	GTokenType next_token;
130 	GTokenValue next_value;
131 	guint next_line;
132 	guint next_position;
133 	GHashTable* symbol_table;
134 	gint input_fd;
135 	const(gchar)* text;
136 	const(gchar)* text_end;
137 	gchar* buffer;
138 	guint scope_id;
139 	GScannerMsgFunc msg_handler;
140 }
141 
142 union _GTokenValue
143 {
144 	gpointer v_symbol;
145 	gchar* v_identifier;
146 	gulong v_binary;
147 	gulong v_octal;
148 	gulong v_int;
149 	guint64 v_int64;
150 	gdouble v_float;
151 	gulong v_hex;
152 	gchar* v_string;
153 	gchar* v_comment;
154 	guchar v_char;
155 	guint v_error;
156 }
157 
158 version(Derelict_Link_Static)
159 {
160     extern( C ) nothrow 
161     {
162         GScanner* g_scanner_new(const(GScannerConfig)* config_templ);
163         void g_scanner_destroy(GScanner* scanner);
164         void g_scanner_input_file(GScanner* scanner, gint input_fd);
165         void g_scanner_sync_file_offset(GScanner* scanner);
166         void g_scanner_input_text(GScanner* scanner, const(gchar)* text, guint text_len);
167         GTokenType g_scanner_get_next_token(GScanner* scanner);
168         GTokenType g_scanner_peek_next_token(GScanner* scanner);
169         GTokenType g_scanner_cur_token(GScanner* scanner);
170         GTokenValue g_scanner_cur_value(GScanner* scanner);
171         guint g_scanner_cur_line(GScanner* scanner);
172         guint g_scanner_cur_position(GScanner* scanner);
173         gboolean g_scanner_eof(GScanner* scanner);
174         guint g_scanner_set_scope(GScanner* scanner, guint scope_id);
175         void g_scanner_scope_add_symbol(GScanner* scanner, guint scope_id, const(gchar)* symbol, gpointer value);
176         void g_scanner_scope_remove_symbol(GScanner* scanner, guint scope_id, const(gchar)* symbol);
177         gpointer g_scanner_scope_lookup_symbol(GScanner* scanner, guint scope_id, const(gchar)* symbol);
178         void g_scanner_scope_foreach_symbol(GScanner* scanner, guint scope_id, GHFunc func, gpointer user_data);
179         gpointer g_scanner_lookup_symbol(GScanner* scanner, const(gchar)* symbol);
180         void g_scanner_unexp_token(GScanner* scanner, GTokenType expected_token, const(gchar)* identifier_spec, const(gchar)* symbol_spec, const(gchar)* symbol_name, const(gchar)* message, gint is_error);
181         void g_scanner_error(GScanner* scanner, const(gchar)* format, ...);
182         void g_scanner_warn(GScanner* scanner, const(gchar)* format, ...);
183     }
184 }
185 else
186 {
187     extern( C ) nothrow 
188     {
189         alias da_g_scanner_new = GScanner* function(const(GScannerConfig)* config_templ);																																			
190         alias da_g_scanner_destroy = void function(GScanner* scanner);																																								
191         alias da_g_scanner_input_file = void function(GScanner* scanner, gint input_fd);																																			
192         alias da_g_scanner_sync_file_offset = void function(GScanner* scanner);																																						
193         alias da_g_scanner_input_text = void function(GScanner* scanner, const(gchar)* text, guint text_len);																														
194         alias da_g_scanner_get_next_token = GTokenType function(GScanner* scanner);																																					
195         alias da_g_scanner_peek_next_token = GTokenType function(GScanner* scanner);																																				
196         alias da_g_scanner_cur_token = GTokenType function(GScanner* scanner);																																						
197         alias da_g_scanner_cur_value = GTokenValue function(GScanner* scanner);																																						
198         alias da_g_scanner_cur_line = guint function(GScanner* scanner);																																							
199         alias da_g_scanner_cur_position = guint function(GScanner* scanner);																																						
200         alias da_g_scanner_eof = gboolean function(GScanner* scanner);																																								
201         alias da_g_scanner_set_scope = guint function(GScanner* scanner, guint scope_id);																																			
202         alias da_g_scanner_scope_add_symbol = void function(GScanner* scanner, guint scope_id, const(gchar)* symbol, gpointer value);																								
203         alias da_g_scanner_scope_remove_symbol = void function(GScanner* scanner, guint scope_id, const(gchar)* symbol);																											
204         alias da_g_scanner_scope_lookup_symbol = gpointer function(GScanner* scanner, guint scope_id, const(gchar)* symbol);																										
205         alias da_g_scanner_scope_foreach_symbol = void function(GScanner* scanner, guint scope_id, GHFunc func, gpointer user_data);																								
206         alias da_g_scanner_lookup_symbol = gpointer function(GScanner* scanner, const(gchar)* symbol);																																
207         alias da_g_scanner_unexp_token = void function(GScanner* scanner, GTokenType expected_token, const(gchar)* identifier_spec, const(gchar)* symbol_spec, const(gchar)* symbol_name, const(gchar)* message, gint is_error);	
208         alias da_g_scanner_error = void function(GScanner* scanner, const(gchar)* format, ...);																																		
209         alias da_g_scanner_warn = void function(GScanner* scanner, const(gchar)* format, ...);																																		
210     }
211 
212     __gshared
213     {
214         da_g_scanner_new g_scanner_new; 
215         da_g_scanner_destroy g_scanner_destroy; 
216         da_g_scanner_input_file g_scanner_input_file; 
217         da_g_scanner_sync_file_offset g_scanner_sync_file_offset; 
218         da_g_scanner_input_text g_scanner_input_text; 
219         da_g_scanner_get_next_token g_scanner_get_next_token; 
220         da_g_scanner_peek_next_token g_scanner_peek_next_token; 
221         da_g_scanner_cur_token g_scanner_cur_token; 
222         da_g_scanner_cur_value g_scanner_cur_value; 
223         da_g_scanner_cur_line g_scanner_cur_line; 
224         da_g_scanner_cur_position g_scanner_cur_position; 
225         da_g_scanner_eof g_scanner_eof; 
226         da_g_scanner_set_scope g_scanner_set_scope; 
227         da_g_scanner_scope_add_symbol g_scanner_scope_add_symbol; 
228         da_g_scanner_scope_remove_symbol g_scanner_scope_remove_symbol; 
229         da_g_scanner_scope_lookup_symbol g_scanner_scope_lookup_symbol; 
230         da_g_scanner_scope_foreach_symbol g_scanner_scope_foreach_symbol; 
231         da_g_scanner_lookup_symbol g_scanner_lookup_symbol; 
232         da_g_scanner_unexp_token g_scanner_unexp_token; 
233         da_g_scanner_error g_scanner_error; 
234         da_g_scanner_warn g_scanner_warn; 
235     }
236 }